package en.edu.zucc.pb.loginapplication.widget;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.util.Calendar;

import lombok.Data;

/**
 * 这主要是封装了 日期pick的作用，。这样只要我以后想要日期 获取的话 就调用这个组件就好了
 * 我我感觉是个挺好的封装，不过不知道是不是用的上，因为以后要用的话，可能就不是这个样子的了
 * 所以说封装，就是很难把握这个度，封装太多的话，以后就难以自定义，白封装
 */
@Data
public class DatePick {

    Context context;

    public static void main(String[] args) {
        DatePick datePick = new DatePick();
//        datePick.setContext(datePick.context);
    }

    public DatePick(Context context) {
        this.context = context;
    }

    public DatePick() {
    }

    private static final String TAG = "DatePick";

    /**
     * 在这个 editText  上面显示日期
     * @param editText
     * @param context
     */
    //    http://www.qishunwang.net/news_show_52933.aspx
    //选择日期,改变文本
//    public void showDatePickDlg(final EditText editText, Context context) {
//
//        showDatePickDlg(editText, context);
//    }

    /**
     * 在这个 editText  上面显示日期
     * @param textView
     * @param context
     */
    //    http://www.qishunwang.net/news_show_52933.aspx
    //选择日期,改变文本
    public void showDatePickDlg(final TextView textView, Context context) {
        Calendar calendar = Calendar.getInstance();
//        但是他是根据选择的时间吗， 而不是 现在的时间
        Log.i(TAG, "showDatePickDlg: calendar  " + calendar);
//        Log.i(this.getClass().getSimpleName(), "showDatePickDlg: calendar  " + calendar);
//        这里 getInstance 的 日期 就是现在的 ，我觉得可能是因为 context 使得 calender 的日期是选择的那个吧
//        他的意思是刚刚构造出来的时候 选择的日期吧。。确实，之前我还以为calendar是 被DatePickerDialog维护的
//        作为日期对象呢，其实他只是为了获取现在时间的一个入参，构造之后就没用了
//        https://blog.csdn.net/qq_39969226/article/details/88324722
//        DatePickerDialog 怎么 做到 选择的 日期
//        https://www.cnblogs.com/niray/p/3877503.html
//        view 是干什么 这个应该已经是从 DatePickerDialog 获取的参数吧
//        (view, year, monthOfYear, dayOfMonth) 这块已经是
//        https://www.cnblogs.com/hbiao68/archive/2011/12/20/2295077.html
//        MainActivity.this,
//        editText.sette
//        EditText
//        DatePickerDialog 只能获得年月日吗？
        @SuppressLint("SetTextI18n") DatePickerDialog datePickerDialog = new DatePickerDialog(context,
                (view, year, monthOfYear, dayOfMonth)
                        -> textView.setText(year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日"),
                calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
//        使用了这几个 年月日的值
        datePickerDialog.show();
    }


//    public void showDatePickDlg(final EditText editText) {
//        showDatePickDlg(editText,context);
//
//    }

    public void showDatePickDlg(final TextView textView) {
        showDatePickDlg(textView,context);

    }

    //点击打开日历，改变日期
//    @SuppressLint("ClickableViewAccessibility")
//    public void showDateOnClick(final EditText editText) {
//
//    }

    //点击打开日历，改变日期
    @SuppressLint("ClickableViewAccessibility")
    public void setShowDatePickOnClickListener(final TextView textView) {
        //点击事件传递，接触，点击打开
        if(textView==null){
            Log.i(TAG,"textView == null");
            return;
        }
        textView.setOnTouchListener((view, motionEvent) -> {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                showDatePickDlg(textView);
                return true;
            }

            return false;
        });
        //改变日期
//        https://www.cnblogs.com/zhujiabin/p/5681040.html
//        焦点被 日期改变 text 获得了，现在的焦点在view ，这个view 就产生了他的 日期选择器
        textView.setOnFocusChangeListener((view, b) -> {
            if (b) {
                showDatePickDlg(textView);
            }

        });
    }
}
